import { moduleTypeRule, objectAny } from "../options/base";
import { getMoment, timePartToggle } from "./time";
import { togglePackStatus } from "./utils";
import Big from 'big.js';

/**
 * 用户组装快递代取订单的前端所需数据
 * @param {Array} data  - 服务器上返回的订单信息数据集合
 * @returns 
 */
export function buildOrderList(
    data:Array<objectAny>,
    moduleName:moduleTypeRule
){
    const listInfo:{
        [keyName:string]:objectAny
    }={};
    for(let i=0;i<data.length;i++){
        const item:objectAny = data[i];
        // 保存当前模块的名称
        item.moduleName=moduleName;
        // 创建取件地址显示名称
        item.run_errand_send_address=`` //代取可用的取件地址
        if(item.school_id.length>0 && item.yizhan_id.length>0){
            item.run_errand_send_address=`${item.school_id[0].school_name} - ${item.yizhan_id[0].name}`
        }
        // 创建配送地址显示名称
        item.user_get_pack_address_1=``
        item.user_get_pack_address_2=``
        if(item.school_id.length>0 && item.userAddress_id.length>0){
            item.user_get_pack_address_1=`${item.school_id[0].school_name} - ${item.userAddress_id[0].address}`
            item.user_get_pack_address_2=`${item.userAddress_id[0].name} ${item.userAddress_id[0].moblie}`
        }

        const pack_id_info=item.pack_id[0];
        const pack_type=pack_id_info.pack_type
        item.create_date_text= getMoment(item.create_date).format(`YYYY-MM-DD HH:mm:ss`)
        
        const packInfoList=[togglePackStatus(pack_id_info.pack_type)];
        let currentPackMoney=pack_id_info.moeny;
        if(item.fast_status){
            currentPackMoney+=pack_id_info.add_money;
            packInfoList.push(togglePackStatus(4))
        }

        item.menu_id[0]={
            ...item.menu_id[0],
            fast_status:item.fast_status,
            pack_type,
            verify_code:item.verify_code,
            currentPackMoney,
            packInfoList,
            pack_id:{
                ...pack_id_info
            }
        }
        delete item.fast_status;
        delete item.verify_code;
        delete item.pack_id;

        let orderId:string=item.order_id;
        if(item.order_child_id!=''){
            orderId=item.order_child_id.split(`_`)[0];
        }
        const value=listInfo[orderId];
        if(value){
            if(item.order_tips_money!==''){
                value.order_tips_money=item.order_tips_money;
            }
            value.menu_id.push(item.menu_id[0])
            value.pack_text.push(pack_type)
            value.order_all_money+=item.order_all_money
        }else{
            listInfo[orderId]={
                ...item,
                expect_time_text:timePartToggle(item.expectedDelivery_min,item.expectedDelivery_max),
                pack_text:[pack_type]
            }
        }

    }
    return listInfo;
}

/**
 * 用户组装美食外卖订单的前端所需数据
 * @param {Array} data  - 服务器上返回的订单信息数据集合
 */
export function takeoutBuildOrderList(
    data:Array<objectAny>,
    moduleName:moduleTypeRule
){
    // 将order_id作为key对象的转换数据集合
    const listInfo:{
        [keyName:string]:objectAny
    }={};
    for(let i=0;i<data.length;i++){
        const item:objectAny = data[i];
        // 保存当前模块的名称
        item.moduleName=moduleName;

        item.create_date_text= getMoment(item.create_date).format(`YYYY-MM-DD HH:mm:ss`)

        let orderId:string=item.order_id;
        
        // 数据库取出的金额是分 需要转换成元显示
        item.order_real_all_money=+new Big(item.order_real_all_money).div(100)
        item.order_all_money=+new Big(item.order_all_money).div(100)

        // 创建每个商品的显示价格
        const check_result_list=item.product_list[0].check_result;
        for(let j=0;j<check_result_list.length;j++){
            const childItem=check_result_list[j]
            const {count,checkProductInventory,product:{product_base_real_price}}=childItem

            // 计算出所选择的规格价格综合
            const toTalInventory=checkProductInventory.reduce((t:number,v:objectAny)=>{
                return +new Big(v.price_format).plus(t)
            },0)
            // 计算出单个商品及规格的总价
            childItem.total_real_price=+new Big(product_base_real_price).plus(toTalInventory).times(count)
        }

        // 创建取件地址显示名称
        item.run_errand_send_address=`` //代取可用的取件地址 在美食模块下未空
        // 创建配送地址显示名称
        item.user_get_pack_address_1=item.user_address_text
        item.user_get_pack_address_2=`${item.user_address_json.name} ${item.user_address_json.moblie}`

        // 兼容快递代取模块
        item.menu_id=[item.menu_json];
        item.expectedDelivery_min=item.expected_delivery_min;
        item.expectedDelivery_max=item.expected_delivery_max;
        item.order_all_money=item.order_real_all_money;
        item.rider_order_status=item.order_status
        item.rider_order_receipt=item.order_receipt


        listInfo[orderId]={
            ...item,
            expect_time_text:timePartToggle(item.expectedDelivery_min,item.expectedDelivery_max),
        }
    }

    return listInfo
}